package com.github.windbender.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.github.windbender.core.HibernateDataStore; import com.github.windbender.core.TypeOfDay; import com.github.windbender.service.CachingTimeZoneGetter; import com.github.windbender.service.CompositeTimeZoneGetter; import com.github.windbender.service.GeoNameTimeZoneGetter; import com.github.windbender.service.StupidTimeZoneGetter; import com.github.windbender.service.TimeZoneGetter; public class FixTypeOfDayCommand { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/wlcdm"; // Database credentials static final String USER = "wlcdm"; static final String PASS = "none"; static Logger log = LoggerFactory.getLogger(FixTypeOfDayCommand.class); public static void main(String[] args) { String geoNameUsername = "x"; TimeZoneGetter tzGetter = new CompositeTimeZoneGetter(new CachingTimeZoneGetter(new GeoNameTimeZoneGetter(geoNameUsername)), new StupidTimeZoneGetter()); String pass = PASS; if(args.length == 1) { pass = args[0]; } Connection conn = null; try { // STEP 2: Register JDBC driver Class.forName("com.mysql.jdbc.Driver"); // STEP 3: Open a connection conn = DriverManager.getConnection(DB_URL, USER, pass); String sql = "select * from events"; PreparedStatement pstmt = conn.prepareStatement(sql); PreparedStatement pstmt2 = conn.prepareStatement("select * from images where event_id=? limit 1"); ResultSet rs = pstmt.executeQuery(); DateTimeFormatter ferMatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S Z"); while(rs.next()) { Long id = rs.getLong("id"); String ts = rs.getString("event_start_time"); ts = ts+" -0000"; DateTime whenDT = ferMatter.parseDateTime(ts); // Date start = rs.getTimestamp("event_start_time"); // DateTime whenDT = new DateTime(start); pstmt2.setLong(1, id); DateTime dsTimeChange = new DateTime(2014,3,9,5,0); ResultSet rs2 = pstmt2.executeQuery(); if(rs2.next()) { double lat = rs2.getDouble("lat"); double lon = rs2.getDouble("lon"); // convert whenDT to LOCAL time... DateTime localTZWhen = whenDT; DateTimeZone zone = localTZWhen.getZone(); DateTimeZone utcZone = DateTimeZone.forID("Etc/UTC"); if(zone.equals(utcZone)) { if(whenDT.isAfter(dsTimeChange)) { localTZWhen = whenDT.minusHours(7); } else { localTZWhen = whenDT.minusHours(8); } } TypeOfDay x = HibernateDataStore.makeTimeOfDay(localTZWhen, lat, lon, tzGetter, log); update(conn,id,x); System.out.println(ts+ " is "+x); } // TypeOfDay tod = ds.dayNightTwilight(ie, ie.getImageRecords() // .first()); // System.out.println("New TOD for " + ie + " is " + tod); // ie.setTypeOfDay(tod); } } catch (SQLException | ClassNotFoundException e) { System.out.println("oops could not do something "+e.getMessage()); } } private static void update(Connection conn, Long id, TypeOfDay x) throws SQLException { PreparedStatement pstmt = conn.prepareStatement("update events set time_of_day=? where id=?"); pstmt.setString(1, x.toString()); pstmt.setLong(2, id); int y = pstmt.executeUpdate(); System.out.println("updated "+y+" rows"); } }